const { defineConfig } = require('@vue/cli-service')

const webpack = require('webpack')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']

module.exports = defineConfig({
  // 不生成map文件
  productionSourceMap: false,
  transpileDependencies: true,
  devServer: {
    webSocketServer: false,
    // 配置 start
    client: {
      overlay: false
    },
    // 配置 end
  },
  configureWebpack: config => {
    const plugins = []
    //start 生成gzip压缩文件
    plugins.push(
      // Ignore all locale files of moment.js  忽略特定资源
      new webpack.IgnorePlugin({
        resourceRegExp: /^\.\/locale$/,
        contextRegExp: /moment$/
      }),

      // 配置compression-webpack-plugin压缩
      new CompressionWebpackPlugin({
        algorithm: 'gzip', //指定压缩算法为 gzip
        test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
        threshold: 10240, //对10K以上的数据进行压缩
        minRatio: 0.8 //指定只有当压缩后的文件大小至少比原文件小 20% 时，才会使用压缩后的文件。
      }),
      new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 5, //指定生成的 chunks 的最大数量。
        chunkOverhead: 100 // 用于为所有 chunks 增加一个估算的开销值
      })
    )
    //end 结束生成gzip压缩文件
    config.plugins = [...config.plugins, ...plugins]
  }
})
